<?php

namespace App\Http\Controllers\Admin;

use App\Models\Article;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Http\Requests\AddArtRequest;

class ArticleController extends Controller
{
    /**
     * Display a listing of the resource.
     *文章列表 
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {
        if($request->get('length')){
            //排序 --- 使用php7的写法   将返回数据的第一个数据给  数组下标为0 的   第二个给数组下标为2的
            ['column'=>$column,'dir'=>$dir] = $request->get('order')[0];
            //上面的php7的写法相当于php5下面的传统写法
            // $orderArr = $request->get('order')[0];
            // $column = $orderArr['column'];
            // $dir = $orderArr['dir'];
            //得到排序字段
            $orderField = $request->get('columns')[$column]['data'];
            //开始位置
            $start = $request->get('start', 0);
            //开始时间
            $datemin = $request->get('datemin');
            //结束时间
            $datemax = $request->get('datemax');
            //搜索关键字
            $title = $request->get('title');
            //构造查询对象
            $query = Article::where('id','>',0);
            //根据时间进行筛选
            if(!empty($datemin) && !empty($datemax)){
                //开始时间
                $datemin = date('Y-m-d H:i:s',strtotime($datemin.'00:00:00'));
                //结束时间
                $datemax = date('Y-m-d H:i:s',strtotime($datemax.'23:59:59'));
                $query->whereBetween('created_at',[$datemin,$datemax]);
            }
            //搜索关键字
            if(!empty($title)){
                $query->where('title','like',"%{$title}%");
            }
            //获取记录数
            $length = min(100, $request->get('length', 10));
            //获取记录总数
            $total = $query->count();
            //取出所有的文章数据
            $data = $query->orderBy($orderField,$dir)->offset($start)->limit($length)->get();
            /*
             *draw:客户端调用服务端次数标志
             recordTotal ： 获取数据记录总条数
             recordsFiltered:数据过滤后的总量
             data:获得的具体数据
             注意：recordsTotal和recordsFiltered都设置为记录的总条数
            */
            $result = [
                'draw' => $request->get('draw'),
                'recordsTotal' => $total,
                'recordsFiltered' => $total,
                'data' => $data
            ];
        return $result;
        }
        return view('admin.article.index');
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('admin.article.create');
    }

    /**
     * Store a newly created resource in storage.
     *这边使用自定义的验证规则进行验证   那么这里就要换成   自己添加的验证规则文件
     *独立表单验证
     *
     *AddArtRequest  这个文件自动返回错误的信息
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(AddArtRequest $request)
    {
        //文件上传
        $pic = config('up.pic');
        //如果确实上传了文件
        if($request->hasFile('pic')){
            //上传
            //参数2 配置的节点名称
            //这里代表将文件上传到服务器上    如果store()中没有参数的话，就上传到local文件夹下   如果
            //想上传到其他的文件夹下  使用第二个参数  
            $ret = $request->file('pic')->store('','article');
            $pic = '/uploads/article/'.$ret;
        }
        //开始添加文章
        $post = $request->except(['_token','file']);
        $post['pic'] = $pic;
        //添加文章到数据库
        Article::create($post);
        return redirect(route('admin.article.index'));
    }

    

    /*
    上传文件
    */
    public function upfile(Request $request){
        //文件上传的默认图片
        $pic = config('up.pic');
        //如果确实上传了文件过来
        if($request->hasFile('file')){
            $ret = $request->file('file')->store('','article');
            $pic = '/uploads/article/'.$ret;
        }
        //如果上传成功，将上传成功后的文件路径进行返回
        return ['status' => 0,'url' => $pic];
    }

    /**
     * Display the specified resource.
     *
     * @param  \App\Models\Article  $article
     * @return \Illuminate\Http\Response
     */
    public function show(Article $article)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Models\Article  $article
     * @return \Illuminate\Http\Response
     */
    public function edit(Article $article)
    {
        return view('admin.article.edit',compact('article'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Models\Article  $article
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Article $article)
    {
        $putData = $request->except(['action','created_at','updated_at','deleted_at','id']);
        $article->update($putData);
        return ['status'=>0,'msg'=>'修改成功'];
    }

    

    /**
     * Remove the specified resource from storage.
     * 
     * @param  \App\Models\Article  $article
     * @return \Illuminate\Http\Response
     */
    public function destroy(Article $article)
    {
        $article->delete();
        return ['status'=>0,'msg'=>'success'];
    }


    
    
}
